﻿using System;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections.Generic;
using System.Runtime.InteropServices;

namespace UtilTools.Structs
{
    /// <summary>
    /// 数据帧对象
    /// </summary>
    public struct CAN_OBJ
    {
        /// <summary>
        /// 帧ID。    【u32】帧id，标准帧11bit，扩展帧29bit。
        /// </summary>
        public UInt32 ID;
        /// <summary>
        /// 【u32】时间值。从CAN卡上电开始计时，计时单位为0.1ms。
        /// </summary>
        public UInt32 TimeStamp;
        /// <summary>
        /// 标志位，【1】TimeStamp值有效
        /// </summary>
        public Byte TimeFlag;
        /// <summary>
        /// 发送类型。【0】正常发送(失败有重发)【1】单次发送
        /// </summary>
        public Byte SendType;
        /// <summary>
        /// 远帧标志。【0】数据帧【1】远程帧（数据段空，用于呼叫从站）。
        /// </summary>
        public Byte RemoteFlag;
        /// <summary>
        /// 扩展帧标志【0】标准帧（11位ID），【1】扩展帧（29位ID）。
        /// </summary>
        public Byte ExternFlag;
        /// <summary>
        /// 单帧有效字节 DLC (8)约束了后面Data[8]中有效字节数。
        /// </summary>
        public Byte DataLen;
        /// <summary>
        /// 数据包，如DataLen为3，Data[0]、Data[1]、Data[2]是有效的。
        /// </summary>
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
        public Byte[] Data;
        /// <summary>
        /// 保留。
        /// </summary>
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
        public Byte[] Reserved;
    }
}
